98a9b6
@@ -997,16 +997,12 @@
public class MongoTemplate implements MongoOperations, ApplicationContextAware,
 			doInsert(collectionName, objectToSave, this.mongoConverter);
 		} else {
 
-			maybeEmitEvent(new BeforeConvertEvent<T>(objectToSave, collectionName));
-			assertUpdateableIdIfNotSet(objectToSave);
-
-			// Create query for entity with the id and old version
-			Object id = convertingAccessor.getProperty(idProperty);
-			Query query = new Query(Criteria.where(idProperty.getName()).is(id).and(versionProperty.getName()).is(version));
-
 			// Bump version number
 			convertingAccessor.setProperty(versionProperty, versionNumber.longValue() + 1);
 
+			maybeEmitEvent(new BeforeConvertEvent<T>(objectToSave, collectionName));
+			assertUpdateableIdIfNotSet(objectToSave);
+
 			Document document = new Document();
 
 			this.mongoConverter.write(objectToSave, document);
@@ -1014,6 +1010,10 @@
public class MongoTemplate implements MongoOperations, ApplicationContextAware,
 			maybeEmitEvent(new BeforeSaveEvent<T>(objectToSave, document, collectionName));
 			Update update = Update.fromDocument(document, ID_FIELD);
 
+			// Create query for entity with the id and old version
+			Object id = convertingAccessor.getProperty(idProperty);
+			Query query = new Query(Criteria.where(idProperty.getName()).is(id).and(versionProperty.getName()).is(version));
+
 			UpdateResult result = doUpdate(collectionName, query, update, objectToSave.getClass(), false, false);
 
 			if (result.getModifiedCount() == 0) {
